///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Στο παρόν υπάρχουν δομές και διαδικασίες που αφορούν στη διαχείριση των κινήσεων.
// Όλες οι μεταβολές στο σκηνικό γίνονται μέσω κινήσεων. Κάθε είδος κίνησης συνοδεύεται
// από μέθοδο του σκηνικού με όνομα "processKinisiXXXX", όπου "XXXX" είναι το είδος της
// κίνησης και μέσω της οποίας εφαρμόζονται οι σχετικές αλλαγές στο σκηνικό. Οι μέθοδοι
// διαχείρισης των κινήσεων δέχονται ως παράμετρο τα data της κίνησης. Μπορούμε να πούμε
// ότι οι μέθοδοι διαχείρισης των κινήσεων είναι για την εφαρμογή το ανάλογο των device
// drivers για ένα λειτουργικό σύστημα.
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// XK -- Επιλογή καφενείο
//
// Με την κίνηση αποχώρησης από καφενείο κάνουμε γνωστό στο σκηνικό ότι κάποιος
// παίκτης αποχωρεί από το καφενείο στο οποίο βρίσκεται.
//
// Δεδομένα
//
//	pektis		Το login name του παίκτη που κάνει την επιλογή.

Skiniko.prototype.processKinisiXK = function(data) {
	var sinedria;

	sinedria = this.skinikoSinedriaGet(data.pektis);
	if (!sinedria)
	return this;

	sinedria.sinedriaKafenioSet();

	return this;
};

// EK -- Επιλογή καφενείο
//
// Με την κίνηση επιλογής καφενείου κάνουμε γνωστό στο σκηνικό ότι κάποιος
// παίκτης έχει επιλέξει κάποιο καφενείο.
//
// Δεδομένα
//
//	pektis		Το login name του παίκτη που κάνει την επιλογή.
//	kafenio		Ο κωδικός καφενείου που επιλέγει ο παίκτης.

Skiniko.prototype.processKinisiEK = function(data) {
	var sinedria, kafenio;

	sinedria = this.skinikoSinedriaGet(data.pektis);
	if (!sinedria)
	return this;

	kafenio = this.skinikoKafenioGet(data.kafenio);
	if (!kafenio)
	return this;

	sinedria.sinedriaKafenioSet(data.kafenio);

	return this;
};

// NK -- Νέο καφενείο
//
// Με την κίνηση νέου καφενείου κάνουμε γνωστό στο σκηνικό ότι δημιουργήθηκε νέο
// καφενείο.
//
// Δεδομένα
//
//	kafenio		Περιέχει τα στοιχεία του καφενείου.

Skiniko.prototype.processKinisiNK = function(data) {
	if (!data.hasOwnProperty('kafenio'))
	return this;

	this.skinikoKafenioSet(new Kafenio(data.kafenio));

	return this;
};

// PK -- Νέος παίκτης
//
// Δεδομένα
//
//	pektis		Τα στοιχεία τού παίκτη.

Skiniko.prototype.processKinisiPK = function(data) {
	this.skinikoPektisSet(new Pektis(data.pektis));
	return this;
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// SN -- Νέα συνεδρία
//
// Με την κίνηση νέας συνεδρία κάνουμε γνωστό στο σκηνικό ότι δημιουργήθηκε νέα
// συνεδρία, δηλαδή ότι κάποιος εισήλθε (ή επανεισήλθε) στο καφενείο.
//
// Δεδομένα
//
//	sinedria	Περιέχει τα στοιχεία της συνεδρίας.
//
// Προαιρετικά δεδομένα
//
//	pektis		Περιέχει τα στοιχεία του παίκτη της συνεδρίας και παρέχεται
//			συνήθως όταν ο παίκτης δεν υπάρχει στο σκηνικό.

Skiniko.prototype.processKinisiSN = function(data) {
	var sinedria;

	if (data.hasOwnProperty('pektis'))
	this.skinikoPektisSet(new Pektis(data.pektis));

	sinedria = this.skinikoSinedriaGet(data.sinedria.pektis);
	if (!sinedria)
	this.skinikoSinedriaSet(sinedria = new Sinedria(data.sinedria));

	return this;
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// NS -- Διαγραφή συνεδρίας
//
// Με την κίνηση διαγραφής συνεδρία κάνουμε γνωστό στο σκηνικό ότι κάποια συνεδρία
// έχει λήξει, δηλαδή ότι κάποιος εξήλθε από το καφενείο, ή το πρόγραμμα τον απόδιωξε
// ως ανενεργό.
//
// Δεδομένα
//
//	login	Το login name του παίκτη της συνεδρίας.

Skiniko.prototype.processKinisiNS = function(data) {
	this.skinikoSinedriaDelete(data.login);
	return this;
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// SL -- Χαιρετισμός κατά την είσοδο/επανείσοδο συνεδρίας
//
// Αμέσως μετά την είσοδο του παίκτη, ή την επώνυμη επαναφόρτωση του καφενείου λαμβάνει
// χώρα χαιρετισμός.
//
// Δεδομένα
//
//	login	Το login name του παίκτη της συνεδρίας.

Skiniko.prototype.processKinisiSL = function(data) {
	return this;
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
